/**
 * dataGrid定时刷新
 * @param {jQuery} $
 * @since 1.0 <2015-7-28> SoChishun Added.
 * @since 1.1 <2015-7-29> SoChishun 布局格式改为Table对齐,图标改为可点击刷新.
 * @since 1.2 <2015-8-8> SoChishun 修正默认0,后面修改正常计数的时候，不计数的问题
 * @example 
 *  <input type="text" value="10" class="aa" /><input type="text" value="5" class="bb" />
 *  $('.aa, .bb').gridTimer({elapsed: function () { $('#main_grid').datagrid('reload'); }});
 *  生成html代码：<div class="grid_timer"><table cellspacing="0" cellpadding="0"><tr><td><a href="#" title="点击图标立即刷新\n(如要停止计时,请把值设为0)">&nbsp;</a></td><td><strong>1</strong>/</td><td><input type="text" value="10" title="如要停止计时,请把值设为0" class="bb" /></td></tr></table></div>
 *  需要css代码：.grid_timer table{border:none}.grid_timer td{padding:0px;border:none}.grid_timer a{background:url('../Icons/clock16.png') no-repeat;display:block;height:16px;width:16px;margin-right:5px;text-decoration:none;}.grid_timer input{width:30px;}
 */
(function ($) {
    $.fn.gridTimer = function (options) {
        var opts = $.extend({}, $.fn.gridTimer.defaults, options);
        return this.each(function () {
            var $this = $(this);
            var restart='0'==$this.val();
            // 值改变的时候，有min和max约束
            $this.change(function () {
                var $tb = $(this);
                if (isNaN($tb.val())) {
                    $tb.val(opts.min);
                } else if ($tb.val() * 1 < opts.min && '0' != $tb.val()) {
                    opts.onError('有效值范围[' + opts.min + '-' + opts.max + ']');
                    $tb.val(opts.min);
                } else if ($tb.val() * 1 > opts.max) {
                    opts.onError('有效值范围[' + opts.min + '-' + opts.max + ']');
                    $tb.val(opts.max);
                }
                if(restart){     
                    restart=false;
                    $.fn.gridTimer.intervalFn(this,opts);
                }
            });
            $this.attr('title', '如要停止计时,请把值设为0').wrap('<div class="grid_timer"><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></div>').parent().before('<td><a href="#" title="点击图标立即刷新\n(如要停止计时,请把值设为0)">&nbsp;</a></td><td><strong>1</strong>/</td>').parent().find('a').click(function () {
                opts.elapsed(0);
                return false;
            });
            var val = $this.val();
            if (!isNaN(val) && val > 0) {
                $.fn.gridTimer.intervalFn(this,opts);
            }
        });
    };
    /**
     * 定时功能
     * @since 1.0 <2015-8-8> SoChishun Added.
     */
    $.fn.gridTimer.intervalFn=function(ele_tb,opts){
        setInterval(function () {
            var val=parseInt($(ele_tb).val());
            if (val < 1) {
                return;
            }
            var $cd=$(ele_tb).parent().prev().find('strong');
            var n = parseInt($cd.text());
            if (n >= val) {
                opts.elapsed(n);
                $cd.text(1);
            } else {
                $cd.text(n + 1);
            }
        }, opts.interval);
        
    };
    /**
     * @interval int 定时间隔
     * @helpText string 帮助内容
     * @min int 最小值
     * @max int 最大值
     * @elapsed function 定时动作方法
     * @onError function 错误处理方法
     * @since 1.0 <2015-7-28> SoChishun Added.
     */
    $.fn.gridTimer.defaults = {interval: 1000, min: 3, max: 120, onError: function (msg) {
            alert(msg);
        }, elapsed: function (n) {
            console.log(n);
        }};
})(jQuery);